"""
使用可用的硬币以最少的数量来产生金额 x。
例如，如果硬币是 {1,5,7}，并且期望的总和是 11，一个最佳解决方案是 5+5+1，这需要 3 个硬币。有 n 个 c
输入：
第一行输入两个整数 n 和 x，表示硬币的数量和期望的货币总额。
第二行有 n 个不同的整数  ，c1，c2，c3 ....cn表示每个硬币的价值。
1 <= n <= 100，
1 <= x <= 1000000
1 <= c <= 1000000
"""
def Sum(num,x):
    dp = [1000000] * (x +1)     # 定义一个长度为 x + 1的 dp 列表，每个元素的最大值不大于1000000
    dp[0] = 0                   # n 是 0 要的硬币就是 0
    for i in num:               # 遍历每种不同金额的硬币
        for j in range(i,x+1):  # 对于每个硬币金额，从该面额开始到金额 x，计算组成各个金额所需的最少硬币数
            # 更新 dp[j]，dp[j - i] + 1 用一枚金额为 i 的硬币后，组成金额 j - i 所需的最少硬币数再加 1
            dp[j] = min(dp[j],dp[j - i] + 1)
    if dp[x] == 1000000:        # 如果dp[x] 等于 1000000，没法用给定的硬币组成金额 x，就返回 -1
        return -1
    return dp[x]                # 返回组成金额 x 所需的最少硬币数

n,x = map(int,input().split())         # n 硬币的数量 ，x 期望货币总额
num = list(map(int, input().split()))  # 将输入的不同字符串用split()以空格分割以map方法转为整数再转为列表
print(Sum(num,x))                      # 调用函数Sum处理，并输出结果